// 云函数入口文件
const cloud = require('wx-server-sdk');
const axios = require('axios');

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });

exports.main = async (event, context) => {
  // 获取用户的 OpenID
  const wxContext = cloud.getWXContext();
  const openid = wxContext.OPENID;

  // 输出 openid 以进行调试
  console.log('当前用户的 openid：', openid);

  // 初始化数据库
  const db = cloud.database();

  try {
    // 查询 'star' 数据库，获取当前用户的错题内容
    const res = await db.collection('star').where({
      _openid: openid
    }).get();

    // 提取 'content' 字段
    const contents = res.data.map(item => item.content);

    // 添加日志，输出 contents
    console.log('用户错题内容：', contents);

    if (contents.length === 0) {
      return {
        success: false,
        errorMessage: '您还没有添加任何错题，请先添加错题。'
      };
    }

    // 将错题内容整理为模型的输入
    let userInput = `以下是我做错的题目，请根据这些错题给出针对性的学习建议：\n${contents.join('\n')}`;

    // 限制 userInput 的长度（例如 2000 字符）
    if (userInput.length > 2000) {
      userInput = userInput.substring(0, 2000);
    }

    // 添加日志，输出 userInput
    console.log('发送给模型的输入：', userInput);

    // 从环境变量中获取 API Key 和 Secret Key
    const AK = process.env.API_KEY || 'iT1M1V2uc5BtNFiGOoMaZ1VfY';
    const SK = process.env.SECRET_KEY || 'fbKuf7TeZMjzhTtRiopLAyF0P3nw5QRG';

    // 定义获取 Access Token 的函数
    async function getAccessToken() {
      try {
        var options = {
          'method': 'POST',
          'url': 'https://aip.baidubce.com/oauth/2.0/token?client_id=iT1M1V2uc5BtNFiGOoMaZ1VfY&client_secret=fbKuf7TeZMjzhTtRiopLAyF0P3nw5QRG&grant_type=client_credentials',
          'headers': {
                  'Content-Type': 'application/json',
                  'Accept': 'application/json',
                  'Content-Type': 'application/x-www-form-urlencoded',

      'User-Agent': 'axios/1.7.7',

      'Accept-Encoding': 'gzip, compress, deflate, br'
          }
      };
  
      axios(options)
          .then(response => {
              console.log(response.data);
              return response.data.access_token;
          })
          .catch(error => {
              throw new Error(error);
          })
        // const response = await axios.post(
        //   'https://aip.baidubce.com/oauth/2.0/token',
        //   ,
        //   {
        //     params: {
        //       grant_type: 'client_credentials',
        //       client_id: AK,
        //       client_secret: SK,
        //     },
        //   }
        // );
        // 
      } catch (error) {
        console.error('获取 Access Token 失败：', error);
        throw error;
      }
    }

    const accessToken = await getAccessToken();
    const apiUrl = `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=${accessToken}`;

    // 构建请求数据
    const requestData = {
      messages: [{ role: 'user', content: userInput }],
      temperature: 0.95,
      top_p: 0.8,
      penalty_score: 1,
      enable_system_memory: false,
      disable_search: false,
      enable_citation: false,
    };

    // 发送请求
    const response = await axios.post(apiUrl, requestData, {
      headers: {
        'Content-Type': 'application/json',
      },
    });

    // 检查百度 API 返回的结果是否有错误
    if (response.data.error_code) {
      console.error('百度 API 返回错误：', response.data);
      return {
        success: false,
        errorMessage: response.data.error_msg || '调用百度 API 失败',
        errorCode: response.data.error_code,
      };
    }

    // 返回结果给前端
    return {
      success: true,
      data: response.data,
    };

  } catch (error) {
    console.error('云函数执行失败：', error);
    return {
      success: false,
      errorMessage: error.message,
    };
  }
};
